package com.ddd.demo.test;

public class BubbleSort {

    public static void main(String[] args) {
        Integer[] arr = new Integer[]{2,3,1,4,5};
        bSort(arr); // 普通冒泡排序
        bSort1(arr); // 带标识判断的冒泡排序
    }

    // 普通冒泡排序
    private static void bSort(Integer[] arr) {
        int length = arr.length; //数组的长度
        for (int i = length  -1; i >0; i--) { // 从后往前 每一次循环 找到一个最大的值
            for (int j = 0; j < i; j++) {
                if(arr[j] >arr[j+1]){ // 用前面的跟后面的进行比较，如果比后面的大，需要交换顺序，这样一轮之后，最后一个就是最大的值
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
        for (int i = 0; i < length; i++) {
            System.out.println("arr[i] = " + arr[i]);
        }
    }

    // 带标识判断的冒泡排序
    // 标记位f优化
    private static void bSort1(Integer[] arr) {
        int length = arr.length;
        for (int i = length  -1; i >0; i--) {
            boolean f = false; //排到是否需要交换数据，如果没有的话，说明是已经排序过的了，后面就不需要判断了
            for (int j = 0; j < i; j++) {
                if(arr[j] >arr[j+1]){
                    f = true;
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
            if(!f){
                return;
            }
        }
        for (int i = 0; i < length; i++) {
            System.out.println("arr[i] = " + arr[i]);
        }
    }
}
